Micron Document
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
| SparkN0de-git | SparkN0de |
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------


Displaying Raw • Download


libs/able/able/adapter.py HEAD (8b8a5035) Text, 5.61 KB

Tff7b72from T7ee787dataclasses Tff7b72import Te6edf3dataclassTb4b4b4, Te6edf3field
Tff7b72from T7ee787functools Tff7b72import Te6edf3partialTb4b4b4, Te6edf3wraps
Tff7b72from T7ee787typing Tff7b72import Te6edf3Optional

Tff7b72from T7ee787android Tff7b72import Te6edf3activity
Tff7b72from T7ee787androidT7ee787.T7ee787permissions Tff7b72import Tb4b4b4(
Te6edf3check_permissionTb4b4b4,
Te6edf3request_permissionsTb4b4b4,
Tb4b4b4)
Tff7b72from T7ee787jnius Tff7b72import Te6edf3autoclass
Tff7b72from T7ee787kivyT7ee787.T7ee787logger Tff7b72import Te6edf3Logger


Te6edf3Activity Tff7b72= Te6edf3autoclassTb4b4b4(Ta5d6ff"Ta5d6ffandroid.app.ActivityTa5d6ff"Tb4b4b4)


Tff7b72def Td2a8ffrequire_bluetooth_enabledTb4b4b4(Te6edf3methodTb4b4b4)Tb4b4b4:
T8b949e"""Decorator to call `BluetoothDispatcher` method
when runtime permissions are granted
and Bluetooth adapter becomes ready.

Decorator launches system activities that allows the user
to grant runtime permissions and turn on Bluetooth,
if Bluetooth is not enabled.
"""

Tf0883e@wrapsTb4b4b4(Te6edf3methodTb4b4b4)
Tff7b72def Td2a8ffwrapperTb4b4b4(Tff7b72selfTb4b4b4, Tff7b72*Te6edf3argsTb4b4b4, Tff7b72*Tff7b72*Te6edf3kwargsTb4b4b4)Tb4b4b4:
Te6edf3manager Tff7b72= Te6edf3AdapterManagerTff7b72.Td2a8ffget_attached_managerTb4b4b4(Tff7b72selfTb4b4b4)
Tff7b72if Te6edf3managerTb4b4b4:
Tff7b72return Te6edf3managerTff7b72.Td2a8ffexecuteTb4b4b4(Te6edf3partialTb4b4b4(Te6edf3methodTb4b4b4, Tff7b72selfTb4b4b4, Tff7b72*Te6edf3argsTb4b4b4, Tff7b72*Tff7b72*Te6edf3kwargsTb4b4b4)Tb4b4b4)
Tff7b72return Tff7b72None

Tff7b72return Te6edf3wrapper


Tff7b72def Td2a8ffset_adapter_failure_rollbackTb4b4b4(Te6edf3handlerTb4b4b4)Tb4b4b4:
T8b949e"""Decorator to launch handler
if permissions are not granted or adapter is not enabled."""

Tff7b72def Td2a8ffinnerTb4b4b4(Te6edf3funcTb4b4b4)Tb4b4b4:
Tf0883e@wrapsTb4b4b4(Te6edf3funcTb4b4b4)
Tff7b72def Td2a8ffwrapperTb4b4b4(Tff7b72selfTb4b4b4, Tff7b72*Te6edf3argsTb4b4b4, Tff7b72*Tff7b72*Te6edf3kwargsTb4b4b4)Tb4b4b4:
Te6edf3manager Tff7b72= Te6edf3AdapterManagerTff7b72.Td2a8ffget_attached_managerTb4b4b4(Tff7b72selfTb4b4b4)
Tff7b72if Te6edf3managerTb4b4b4:
Te6edf3managerTff7b72.Td2a8ffrollback_handlersTff7b72.Td2a8ffappendTb4b4b4(Te6edf3partialTb4b4b4(Te6edf3handlerTb4b4b4, Tff7b72selfTb4b4b4)Tb4b4b4)
Tff7b72return Te6edf3funcTb4b4b4(Tff7b72selfTb4b4b4, Tff7b72*Te6edf3argsTb4b4b4, Tff7b72*Tff7b72*Te6edf3kwargsTb4b4b4)
Tff7b72return Tff7b72None

Tff7b72return Te6edf3wrapper

Tff7b72return Te6edf3inner


Tf0883e@dataclass
Tff7b72class T56d364AdapterManagerTb4b4b4:
T8b949e"""
Class for managing the execution of operations
that require the BLE adapter.
Operations are deferred until runtime permissions are granted
and the BLE adapter is enabled.
"""

Te6edf3bleTb4b4b4: Ta5d6ff"Ta5d6fforg.able.BLETa5d6ff"
Te6edf3enable_ble_codeTb4b4b4: Tffa657str
Te6edf3runtime_permissionsTb4b4b4: Tffa657list
Te6edf3operationsTb4b4b4: Tffa657list Tff7b72= Te6edf3fieldTb4b4b4(Te6edf3default_factoryTff7b72=Tffa657listTb4b4b4)
Te6edf3rollback_handlersTb4b4b4: Tffa657list Tff7b72= Te6edf3fieldTb4b4b4(Te6edf3default_factoryTff7b72=Tffa657listTb4b4b4)
Te6edf3is_permissions_grantedTb4b4b4: Tffa657bool Tff7b72= Tff7b72False
Te6edf3is_permissions_requestedTb4b4b4: Tffa657bool Tff7b72= Tff7b72False
Te6edf3is_adapter_requestedTb4b4b4: Tffa657bool Tff7b72= Tff7b72False

Tf0883e@property
Tff7b72def Td2a8ffadapterTb4b4b4(Tff7b72selfTb4b4b4) Tff7b72-Tff7b72> Te6edf3OptionalTb4b4b4[Ta5d6ff"Ta5d6ffandroid.bluetooth.BluetoothAdapterTa5d6ff"Tb4b4b4]Tb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ffhas_permissionsTb4b4b4:
Te6edf3adapter Tff7b72= Tff7b72selfTff7b72.Td2a8ffbleTff7b72.Td2a8ffmBluetoothAdapter
Tff7b72if Te6edf3adapter Tff7b72and Te6edf3adapterTff7b72.Td2a8ffisEnabledTb4b4b4(Tb4b4b4)Tb4b4b4:
Tff7b72return Te6edf3adapter
Tff7b72return Tff7b72None

Tf0883e@property
Tff7b72def Td2a8ffhas_permissionsTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Tff7b72if Tff7b72not Tff7b72selfTff7b72.Td2a8ffis_permissions_grantedTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffis_permissions_granted Tff7b72= Tff7b72selfTff7b72.Td2a8ffcheck_permissionsTb4b4b4(Tb4b4b4)
Tff7b72return Tff7b72selfTff7b72.Td2a8ffis_permissions_granted

Tf0883e@property
Tff7b72def Td2a8ffis_service_contextTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Tff7b72return Tff7b72not Te6edf3activityTff7b72.Td2a8ff_activity

Tff7b72def Td2a8ff__post_init__Tb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ffis_service_contextTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffis_permissions_granted Tff7b72= Tff7b72True
Tff7b72elseTb4b4b4:
Te6edf3activityTff7b72.Td2a8ffbindTb4b4b4(Te6edf3on_activity_resultTff7b72=Tff7b72selfTff7b72.Td2a8ffon_activity_resultTb4b4b4)

Tf0883e@classmethod
Tff7b72def Td2a8ffget_attached_managerTb4b4b4(Tff7b72clsTb4b4b4, Te6edf3instanceTb4b4b4)Tb4b4b4:
Te6edf3manager Tff7b72= Tffa657getattrTb4b4b4(Te6edf3instanceTb4b4b4, Ta5d6ff"Ta5d6ff_adapter_managerTa5d6ff"Tb4b4b4, Tff7b72NoneTb4b4b4)
Tff7b72if Tff7b72not Te6edf3managerTb4b4b4:
Te6edf3LoggerTff7b72.Td2a8fferrorTb4b4b4(Ta5d6ff"Ta5d6ffBLE adapter manager is not installedTa5d6ff"Tb4b4b4)
Tff7b72return Te6edf3manager

Tff7b72def Td2a8ffinstallTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3instanceTb4b4b4)Tb4b4b4:
Tffa657setattrTb4b4b4(Te6edf3instanceTb4b4b4, Ta5d6ff"Ta5d6ff_adapter_managerTa5d6ff"Tb4b4b4, Tff7b72selfTb4b4b4)

Tff7b72def Td2a8ffcheck_permissionsTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Tff7b72return Tffa657allTb4b4b4(
Tb4b4b4[Te6edf3check_permissionTb4b4b4(Te6edf3permissionTb4b4b4) Tff7b72for Te6edf3permission Tff7b72in Tff7b72selfTff7b72.Td2a8ffruntime_permissionsTb4b4b4]
Tb4b4b4)

Tff7b72def Td2a8ffrequest_permissionsTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ffis_permissions_requestedTb4b4b4:
Tff7b72return
Tff7b72selfTff7b72.Td2a8ffis_permissions_requested Tff7b72= Tff7b72True
Tff7b72if Tff7b72not Tff7b72selfTff7b72.Td2a8ffis_service_contextTb4b4b4:
Te6edf3LoggerTff7b72.Td2a8ffdebugTb4b4b4(Ta5d6ff"Ta5d6ffRequest runtime permissionsTa5d6ff"Tb4b4b4)
Te6edf3request_permissionsTb4b4b4(
Tff7b72selfTff7b72.Td2a8ffruntime_permissionsTb4b4b4,
Tff7b72selfTff7b72.Td2a8ffon_runtime_permissionsTb4b4b4,
Tb4b4b4)
Tff7b72elseTb4b4b4:
Te6edf3LoggerTff7b72.Td2a8fferrorTb4b4b4(Ta5d6ff"Ta5d6ffRequired permissions are not granted for serviceTa5d6ff"Tb4b4b4)

Tff7b72def Td2a8ffrequest_adapterTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ffis_adapter_requestedTb4b4b4:
Tff7b72return
Tff7b72selfTff7b72.Td2a8ffis_adapter_requested Tff7b72= Tff7b72True
Tff7b72selfTff7b72.Td2a8ffbleTff7b72.Td2a8ffgetAdapterTb4b4b4(Tff7b72selfTff7b72.Td2a8ffenable_ble_codeTb4b4b4)

Tff7b72def Td2a8ffrollbackTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ff_execute_operationsTb4b4b4(Tff7b72selfTff7b72.Td2a8ffrollback_handlersTb4b4b4)

Tff7b72def Td2a8ffexecuteTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3operationTb4b4b4)Tb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ffadapterTb4b4b4:
T8b949e# execute immediately, if adapter is enabled
Tff7b72return Te6edf3operationTb4b4b4(Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffoperationsTff7b72.Td2a8ffappendTb4b4b4(Te6edf3operationTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffexecute_operationsTb4b4b4(Tb4b4b4)

Tff7b72def Td2a8ffexecute_operationsTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ffhas_permissionsTb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ffadapterTb4b4b4:
Tff7b72selfTff7b72.Td2a8ff_execute_operationsTb4b4b4(Tff7b72selfTff7b72.Td2a8ffoperationsTb4b4b4)
Tff7b72elseTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffrequest_adapterTb4b4b4(Tb4b4b4)
Tff7b72elseTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffrequest_permissionsTb4b4b4(Tb4b4b4)

Tff7b72def Td2a8ff_execute_operationsTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3operationsTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffoperations Tff7b72= Tb4b4b4[Tb4b4b4]
Tff7b72selfTff7b72.Td2a8ffrollback_handlers Tff7b72= Tb4b4b4[Tb4b4b4]
Tff7b72for Te6edf3operation Tff7b72in Te6edf3operationsTb4b4b4:
Tff7b72tryTb4b4b4:
Te6edf3operationTb4b4b4(Tb4b4b4)
Tff7b72except Tf85149Exception Tff7b72as Te6edf3excTb4b4b4:
Te6edf3LoggerTff7b72.Td2a8ffexceptionTb4b4b4(Te6edf3excTb4b4b4)

Tff7b72def Td2a8ffon_runtime_permissionsTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3permissionsTb4b4b4, Te6edf3grant_resultsTb4b4b4)Tb4b4b4:
Te6edf3granted Tff7b72= Tffa657allTb4b4b4(Te6edf3grant_resultsTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffis_permissions_granted Tff7b72= Te6edf3granted
Tff7b72selfTff7b72.Td2a8ffis_permissions_requested Tff7b72= Tff7b72False T8b949e# allow future invocations
Tff7b72if Te6edf3grantedTb4b4b4:
Te6edf3LoggerTff7b72.Td2a8ffdebugTb4b4b4(Ta5d6ff"Ta5d6ffRequired permissions are grantedTa5d6ff"Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffexecute_operationsTb4b4b4(Tb4b4b4)
Tff7b72elseTb4b4b4:
Te6edf3LoggerTff7b72.Td2a8fferrorTb4b4b4(Ta5d6ff"Ta5d6ffRequired permissions are not grantedTa5d6ff"Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffrollbackTb4b4b4(Tb4b4b4)

Tff7b72def Td2a8ffon_activity_resultTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3requestCodeTb4b4b4, Te6edf3resultCodeTb4b4b4, Te6edf3intentTb4b4b4)Tb4b4b4:
Tff7b72if Te6edf3requestCode Tff7b72== Tff7b72selfTff7b72.Td2a8ffenable_ble_codeTb4b4b4:
Te6edf3enabled Tff7b72= Te6edf3resultCode Tff7b72== Te6edf3ActivityTff7b72.Td2a8ffRESULT_OK
Tff7b72selfTff7b72.Td2a8ffis_adapter_requested Tff7b72= Tff7b72False T8b949e# allow future invocations
Tff7b72if Te6edf3enabledTb4b4b4:
Te6edf3LoggerTff7b72.Td2a8ffdebugTb4b4b4(Ta5d6ff"Ta5d6ffBLE adapter is enabledTa5d6ff"Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffexecute_operationsTb4b4b4(Tb4b4b4)
Tff7b72elseTb4b4b4:
Te6edf3LoggerTff7b72.Td2a8fferrorTb4b4b4(Ta5d6ff"Ta5d6ffBLE adapter is not enabledTa5d6ff"Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffrollbackTb4b4b4(Tb4b4b4)


──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────